home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 52
/
Aminet 52 (2002)(GTI - Schatztruhe)[!][Dec 2002].iso
/
Aminet
/
misc
/
emu
/
Apex-src.lha
/
DUP.XPL
< prev
next >
Wrap
Text File
|
2001-09-30
|
2KB
|
122 lines
\DUP.XPL APR-10-87
\Disk duplicator for Apex V1.8.
\REVISION HISTORY:
\NOV-21-85, Added single disk dup and repeated duplication, L.B.
\FEB-28-86, Converted to 68000 use.
\DEC-05-86, Fixed the incredible shrinking buffer bug, L.B.
\APR-10-87, Changed string conventions
code RESERVE=3, CHIN=7, CHOUT=8, CRLF=9,
INTIN=10, INTOUT=11, TEXT=12, OPENI=13,
FREE=18, FWRITE=30, FREAD=31;
int I, FROMUNIT, TOUNIT, SIZE0, MAXBLK;
addr BUFFER;
func VERIFY; \Return 'TRUE' if "Y" (or "y") is typed in
begin
TEXT(0, " - ARE YOU SURE (N/Y)? ");
OPENI(0);
return (CHIN(0)!$20) = ^y;
end; \VERIFY
proc NEWDISK(FLAG); \Prompt user to insert disk
int FLAG;
begin
if TOUNIT = FROMUNIT then
begin
TEXT(0, if FLAG then "INSERT COPY DISK" else "RESTORE ORIGINAL DISK");
repeat until VERIFY;
end;
end; \NEWDISK
proc SHOWTITLE(UNIT); \Output the title of the specified unit
int UNIT;
int I, CH;
addr BUFFER, TITLE;
begin
BUFFER:= RESERVE(256);
TITLE:= BUFFER +88;
FREAD(UNIT, 12, BUFFER, 1);
for I:= 0, 79 do
begin
CH:= TITLE(I);
if CH>=$20 & CH<$80 then CHOUT(0,CH)
else I:= 80;
end;
end; \SHOWTITLE
proc DUPDSK;
int BLK, SIZE;
begin
SIZE:= SIZE0;
BLK:= 0;
loop begin
if MAXBLK-BLK < SIZE then SIZE:= MAXBLK -BLK;
if SIZE = 0 then quit;
FREAD(FROMUNIT, BLK, BUFFER, SIZE);
NEWDISK(true); \Insert copy disk (if necessary)
FWRITE(TOUNIT, BLK, BUFFER, SIZE);
BLK:= BLK + SIZE;
if BLK = MAXBLK then quit;
NEWDISK(false); \Insert original disk (if necessary)
end;
end; \DUPDSK
begin \MAIN
SIZE0:= FREE /256;
SIZE0:= SIZE0 -1; \Leave a little space to work with (for safety)
BUFFER:= RESERVE(SIZE0 *256);
TEXT(0,"-- DISK DUPLICATOR, V1.8x3 --
BUFFER: "); INTOUT(0,SIZE0); CRLF(0);
TEXT(0,"FROM, TO UNITS? ");
FROMUNIT:= INTIN(0);
TOUNIT:= INTIN(0);
TEXT(0,"HOW MANY BLOCKS? ");
MAXBLK:= INTIN(0);
loop begin
if TOUNIT # FROMUNIT then
begin
repeat TEXT(0, "ABOUT TO OVERWRITE UNIT ");
INTOUT(0, TOUNIT); CRLF(0);
SHOWTITLE(TOUNIT); CRLF(0);
until VERIFY;
end
else begin
TEXT(0,"INSERT ORIGINAL DISK");
repeat until VERIFY;
end;
DUPDSK;
TEXT(0,"DUP ANOTHER DISK (N/Y)? ");
OPENI(0);
if (CHIN(0)!$20) # ^y then quit;
CRLF(0);
end;
end; \MAIN
DUPDSK;
TEXT(0,"DUP ANOTHER DISK (N/Y)? ");
OPENI(0);
if (CHIN(0)!$20) # ^y then quit;
CRLF(0);
end;
end; \MAIN